package fox.framework.rpc.converter;

import fox.framework.rpc.server.dispatcher.router.DataBinder;

import java.lang.reflect.Type;

/**
 * @author cuichao
 * @Description: RpcMessageConverter
 * @Date: create in 2021/1/21 14:57
 */
public interface RpcMessageConverter {
    /**
     * 返回转换器名称
     * @return
     */
    String getConverterName();

    /**
     * 是否可以转换
     * @param mediaType
     * @param protocol
     * @return
     */
   boolean hasSupport(String protocol,String mediaType);

    /**
     * 解码
     * @param source
     * @param cls
     * @param <T>
     * @return
     */
    <T>T decode(byte[] source, Class<T> cls);

    /**
     * 解码
     * @param source
     * @param type
     * @return
     */
    Object decode(byte[] source, Type type);

    /**
     * 解码
     * @param bytes
     * @param dataBinders
     * @return
     */
    Object[] decode(byte[] bytes, DataBinder[] dataBinders);
    /**
     * 编码
     * @param object
     * @return
     */
    byte[] encode(Object object);

}
